package main

import (
	"fmt"
)

func forSum() {
	// 计算从1到100的累加结果， 注意：i的初始表达式不能定义var i int =1
	var sum1 int
	for i := 1; i <= 100; i++ {
		sum1 += i
	}
	fmt.Println("1到100累加结果为：", sum1)

	// 第二种方法 go中没有while循环
	var sum2 int = 1
	i := 1
	for i <= 100 {
		sum2 *= i
		i++
	}
	fmt.Println("第二种循环for结果:", sum2)

	// 第三种方法
	j := 0
	for ; j < 10; j++ {
		fmt.Println("j输出：", j)
	}

	// 死循环
	for {

	}
	for {

	}

	k := 0
	for {
		fmt.Println("for k out put", k)
		k++
		if k > 3 {
			break // 结束for 循环
		}
	}
}

// break的使用
func breakFor() {
	var sum int = 0
	for i := 1; i <= 100; i++ {
		sum += i
		if sum > 300 {
			break
		}
	}

	for i := 1; i < 5; i++ {
		for j := 2; j <= 4; j++ {
			fmt.Println("i:%v,j:%v", i, j)
			if i == 2 && j == 2 {
				break // 跳出的是内部循环，外部循环还会继续
			}
		}
	}

lable1:
	for i := 1; i < 5; i++ {
		for j := 2; j <= 4; j++ {
			fmt.Println("i:%v,j:%v", i, j)
			if i == 2 && j == 2 {
				break lable1 // 跳出外部循环, 跳出指定的标签
			}
		}
	}
}

// continue操作
func continueOpt() {
	for i := 1; i < 100; i++ {
		if i%6 != 0 {
			continue // 结束本次循环，继续下次循环
		}
	}

	// 使用标签 继续外层循环
lable:
	for i := 1; i < 100; i++ {
		for j := 2; j <= 4; j++ {
			if i == 2 && j == 2 {
				continue lable // 结束本次循环，继续下次循环
			}
		}

	}

}

// goto 不推荐使用
func gotoOpt() {
	fmt.Println("hello golang1")
	fmt.Println("hello golang2")
	goto label1
	fmt.Println("hello golang3")
	fmt.Println("hello golang4")
	fmt.Println("hello golang5")
	fmt.Println("hello golang6")
label1:
	fmt.Println("hello golang7")
	fmt.Println("hello golang8")
	fmt.Println("hello golang9")
}

func returnOpt() {
	for i := 1; i <= 100; i++ {
		fmt.Println(i)
		if i == 14 {
			return //结束当前的函数
		}
		fmt.Println("hello golang")
	}
}
func main() {
	forArr()
}
func forArr() {
	// 第三中遍历数组或者集合
	numbers := [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	for i2, number := range numbers {
		fmt.Printf("下标index:%+v, 数值：%d \n", i2, number)
	}
	// 不要下标
	for _, number := range numbers {
		fmt.Printf("数值：%v \n", number)
	}
}
